/**
 * axios封装
 * 请求拦截、响应拦截、错误统一处理
 */

import axios from 'axios';
import alertTip from '../alertTip';
import {Loading} from 'element-ui'
import {getCookie, setCookie} from '@/utils/cookiesUtil.js'
import getOauth from '_common/getOauth';
import {getQuery} from '@/utils/utils'
import base from '_common/services/base';
const apiUrl = base.test;
let loadingInstance = null
let loadingCount = 0

function setLoading(isLoading) {
  if (isLoading) {
    loadingCount++;
    loadingInstance = Loading.service({})
  } else if (loadingCount > 0) {
    loadingCount--;
    if (!loadingCount > 0) loadingInstance.close()
  }
}
/**
 * 提示函数
 * 禁止点击蒙层、显示一秒后关闭
 */
const tip = msg => {
  alertTip({
    message: msg,
    time: 1000,
  });
}

/**
 * 当token不存在，返回的状态码为504 的时候需要去获取微信授权
 */

/**
 * 请求失败后的错误统一处理
 * @param {Number} status 请求失败的状态码
 */
const errorHandle = (status, other) => {
  // 状态码判断
  console.log('statuswwww:', status);
  switch (status) {
    // 401: 未登录状态，跳转登录页
    case 504:
      tip('token 失效了～～');
    case 404:
      tip('请求的资源不存在');
      break;
    default:
      console.log(other);
  }
}

// 创建axios实例
var instance = axios.create({timeout: 1000 * 12});
// 设置post请求头
instance.defaults.headers.post['Content-Type'] = 'application/json';

/**
 * 请求拦截器
 * 每次请求前，如果存在token则在请求头中携带token
 */
instance.interceptors.request.use(
  async config => {
    // 登录流程控制中，根据本地是否存在token判断用户的登录情况
    // 但是即使token存在，也有可能token是过期的，所以在每次的请求头中携带token
    const token = getCookie('token');
    config.headers.cAuthToken = `${token}`;
    // // 每次进入页面的时候 获取路径中的参数
    // const code = getQuery('code');
    // const state = getQuery('state');
    // if (token) {  // 判断是否存在token，如果存在的话，则每个http header都加上token

    // } else if (code && state) {
    //   await axios({
    //     url: `${apiUrl}/nu/anon/user/oauth2/access`,
    //     method: 'post',
    //     data:{
    //         code,
    //         state,
    //     },
    //   }).then(res => {
    //     console.log('res:', res);
    //     if (res.data && res.data.code === 0) {
    //       const {token, weChatUserInfo, hasBind, agencyLevel} = res.data.data;
    //       const {nickName, headImgUrl } = weChatUserInfo;
    //         // 把token 和用户信息存在本地
    //         setCookie('token', token);
    //         setCookie('nickName', nickName);
    //         setCookie('headImgUrl', headImgUrl);
    //         setCookie('agencyLevel', agencyLevel)
    //         config.headers.cAuthToken = `${token}`;
    //         if (!hasBind) {
    //             location.href = `${apiUrl}/login.html`;
    //         }
    //     }
    //   })
    // }
    setLoading(true)
    return config;
  },
  error => {
    setLoading(false)
    Promise.error(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  // 请求成功
  res => {
    setLoading(false)
    if (res.status === 200) {
      if (res.data.code === 504) {
        getOauth();
      } else if(res.data.code === 507) {
        location.href = `${apiUrl}/login.html`;
      }
      return Promise.resolve(res.data)
    }
    return Promise.reject(res)
  },
  // 请求失败
  error => {
    console.log('error:', error);
    setLoading(false)
    const {response} = error;
    if (response) {
      // 请求已发出，但是不在2xx的范围
      errorHandle(response.status, response.data.message);
      return Promise.reject(response);
    } else {
    }
  });

export default instance;